package jp.co.toshiba.ffsa.service.csas;

import java.util.ResourceBundle;

import jp.co.toshiba.ffsa.common.Validation;
import jp.co.toshiba.ffsa.entity.User;

import org.seasar.extension.jdbc.JdbcManager;
import org.seasar.extension.jdbc.where.SimpleWhere;
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

/**
 * 新規ID登録(登録内容入力)ページビジネスロジック
 * @author npc
 */
public class Csas101Service {
    private String emailAddress = "";
    private String password = "";
    private String region = "";

    /**
     * メールアドレスをセットする
     * @param emailAddress
     */
    public void setEmailAddress(String emailAddress){this.emailAddress = emailAddress;}

    /**
     * パスワードをセットする
     * @param password
     */
    public void setPassword(String password){this.password = password;}

    /**
     * regionをセットする
     * @param region
     */
    public void setRegion(String region){this.region = region;}

    /**
     * パスワードのチェック処理1
     * @throws Exception
     */
    public boolean passwordCheck1() throws Exception{
        boolean passwordCheck;
        try{
            //パスワードと同じ文字がメールアドレスに含れるかチェック
            Validation validation = new Validation();
            passwordCheck = validation.passwordCheck(emailAddress, password);
        }catch(Exception e){
            throw e;
        }
        return passwordCheck;
    }

    /**
     * パスワードのチェック処理2
     * @throws Exception
     */
    public boolean passwordCheck2() throws Exception{

        try{
            //パスワードが半角数字のみの場合または半角アルファベットのみの場合
            if(password.matches("^[0-9]+$")){return false;}
            if(password.matches("^[a-z]+$")){return false;}
            if(password.matches("^[A-Z]+$")){return false;}
        }catch(Exception e){
            throw e;
        }
        return true;
    }

    /**
     * メールアドレスのチェック処理
     * @throws Exception
     */
    public boolean getUser() throws Exception{
        boolean getuser=true;
        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);
        try{
            // 検索条件
            SimpleWhere swh = new SimpleWhere().eq("mailAddress", this.emailAddress)
                    .eq("deleteFlag", "0");

            // 一覧取得
            User user= jdbcManager.from(User.class)
                    .where(swh)
                    .getSingleResult()
                    ;
            if(user != null){
                if(user.userIDFlag.equals("0")){  //取得した顧客のUser_id_flag = 0の場合
                    getuser = true;
                }else{                            //取得した顧客のUser_id_flag = 1の場合
                    getuser = false;
                }
            }else{                                //顧客情報が取得できなかった場合
                getuser=true;
            }
        }catch(Exception e){
            throw e;
        }
        return getuser;
    }

    /**
     * 禁止ドメインチェック
     * @throws Exception
     */
    public boolean  isValidMailDomain() throws Exception {
        // メールアドレスからドメイン(@より後の文字列)を取り出す
        int index = emailAddress.indexOf("@");
        int length = emailAddress.length();
        String mailDomain = emailAddress.substring(index,length);

        // ドメインに禁止ドメインが含まれているかチェック
        ResourceBundle mailBlockList = ResourceBundle.getBundle("mail_block_list");
        for (Object element : mailBlockList.keySet()) {
            String blockDomain = (String) element;
            if (mailDomain.contains(blockDomain)) {
                return false;
            }
        }

        return true;

    }

    /**
     * Regionのチェック
     * @throws Exception
     */
    public boolean  isnotJapan() throws Exception{
        boolean isnotjapan;
        try {
            //regionが日本以外の場合
            isnotjapan = true;
            //regionが日本の場合
            if(region.equals("5")){
                isnotjapan = false;
            }

        }catch (Exception e) {
            throw e;
        }
        return isnotjapan;
    }

}

